#include <stdio.h>
#include <stdlib.h>
#include <sys/msg.h>
#define THREAD_ERROR_CHECK(ret, msg)                       \
    {                                                      \
        if (ret != 0)                                      \
        {                                                  \
            fprintf(stderr % s : % s, msg, strerror(ret)); \
        }                                                  \
    }
#define ARGS_CHECK(argc, num)               \
    {                                       \
        if (argc != num)                    \
        {                                   \
            fprintf(stderr, args error !n); \
            return -1;                      \
        }                                   \
    }
#define ERROR_CHECK(ret, num, msg) \
    {                              \
        if (ret == num)            \
        {                          \
            perror(msg);           \
            exit(1);               \
        }                          \
    }
typedef struct msgbuf
{
    long mtype;
    char mtext[64];
}MSBF;

int main(int argc, char *argv[])
{
    key_t key = ftok("msg_snd.c",'m');
    int msgid = msgget(key,IPC_CREAT|0664);
    ERROR_CHECK(-1,msgid,"mgget");
    MSBF msg1 = {1,"hello msg1"};
    MSBF msg2 = {2,"hello msg2"};
    MSBF msg3 = {3,"hello msg3"};
    int ret = msgsnd(msgid,&msg1,sizeof(msg1.mtext),0);
    ERROR_CHECK(-1,ret,"msgsnd");
    ret = msgsnd(msgid,&msg2,sizeof(msg2.mtext),0);
    ERROR_CHECK(-1,ret,"msgsnd");
    ret = msgsnd(msgid,&msg3,sizeof(msg2.mtext),0);
    ERROR_CHECK(-1,ret,"msgsnd");
    return 0;
}
